/*
 * PedidoEmpresa.java
 *
 * Created on 11/03/2009, 16:47:00
 * Copyright Jaime Junior
 * Copyright Elizabete Yanase Hirabara Bento
 */
package Adecot.Pedidos;

import Adecot.*;
import Controller.*;
import Controller.Facade.IceDecorator;
import Controller.Facade.ValidaFacade;
import Model.*;
import com.icesoft.faces.component.ext.*;
import com.icesoft.faces.component.jsfcl.data.*;
import com.icesoft.faces.component.panelpopup.PanelPopup;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.sun.rave.faces.converter.CalendarConverter;
import com.sun.rave.faces.converter.SqlDateConverter;
import com.sun.rave.web.ui.appbase.AbstractPageBean;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.FacesException;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.CharacterConverter;
import javax.faces.convert.DateTimeConverter;
import javax.faces.convert.DoubleConverter;
import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.SelectItem;
import javax.faces.validator.DoubleRangeValidator;

/**
 * <p>Page bean that corresponds to a similarly named JSP page.  This
 * class contains component definitions (and initialization code) for
 * all components that you have defined on this page, as well as
 * lifecycle methods and event handlers where you may add behavior
 * to respond to incoming events.</p>
 */
public class PedidoEmpresa extends AbstractPageBean {
    // <editor-fold defaultstate="collapsed" desc="Managed Component Definition">

    private int __placeholder;
    /**
     * <p>Automatically managed component initialization.  <strong>WARNING:</strong>
     * This method is automatically generated, so any user-specified code inserted
     * here is subject to being replaced.</p>
     */

    //variável para facilitar na exlusão de dados somente quando clicar no cadastrar
    private static List<ItemPedidoEmpresa> listaExclusÃ£o = new ArrayList<ItemPedidoEmpresa>();

    private void _init() throws Exception {
    }
    private boolean parar;

   public boolean isParar() {
      return parar;
   }

   public void setParar(boolean parar) {
      this.parar = parar;
   }

    //variável para incluir itens na tabela e no pedido
    private DefaultSelectedData empresaSelecionada = new DefaultSelectedData();

    public DefaultSelectedData getEmpresaSelecionada() {
        return empresaSelecionada;
    }

    public void setEmpresaSelecionada(DefaultSelectedData dsd) {
        this.empresaSelecionada = dsd;
    }
    private DefaultSelectionItems empresas = new DefaultSelectionItems();

    public DefaultSelectionItems getEmpresas() {
        return empresas;
    }

    public void setEmpresas(DefaultSelectionItems dsi) {
        this.empresas = dsi;
    }
    private DefaultSelectedData empresaSelecionadaConsulta = new DefaultSelectedData();

    public DefaultSelectedData getEmpresaSelecionadaConsulta() {
        return empresaSelecionadaConsulta;
    }

    public void setEmpresaSelecionadaConsulta(DefaultSelectedData empresaSelecionadaConsulta) {
        this.empresaSelecionadaConsulta = empresaSelecionadaConsulta;
    }

    public DefaultSelectionItems getEmpresasConsulta() {
        return empresasConsulta;
    }

    public void setEmpresasConsulta(DefaultSelectionItems empresasConsulta) {
        this.empresasConsulta = empresasConsulta;
    }
    private DefaultSelectionItems empresasConsulta = new DefaultSelectionItems();
    private DefaultSelectedData produtoSelecionado = new DefaultSelectedData();

    public DefaultSelectedData getProdutoSelecionado() {
        return produtoSelecionado;
    }

    public void setProdutoSelecionado(DefaultSelectedData dsd) {
        this.produtoSelecionado = dsd;
    }
    private DefaultSelectionItems produtos = new DefaultSelectionItems();

    public DefaultSelectionItems getProdutos() {
        return produtos;
    }

    public void setProdutos(DefaultSelectionItems dsi) {
        this.produtos = dsi;
    }
    private HtmlSelectOneMenu comboEmpresa = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getComboEmpresa() {
        return comboEmpresa;
    }

    public void setComboEmpresa(HtmlSelectOneMenu hsom) {
        this.comboEmpresa = hsom;
    }
    private HtmlSelectOneMenu comboProduto = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getComboProduto() {
        return comboProduto;
    }

    public void setComboProduto(HtmlSelectOneMenu hsom) {
        this.comboProduto = hsom;
    }
    private HtmlInputText campoQuantidade = new HtmlInputText();

    public HtmlInputText getCampoQuantidade() {
        return campoQuantidade;
    }

    public void setCampoQuantidade(HtmlInputText hit) {
        this.campoQuantidade = hit;
    }
    private SelectInputDateBean dataSelecionada = new SelectInputDateBean();

    public SelectInputDateBean getDataSelecionada() {
        return dataSelecionada;
    }

    public void setDataSelecionada(SelectInputDateBean sidb) {
        this.dataSelecionada = sidb;
    }
    private SelectInputDateBean dataPrevisaoEntrega = new SelectInputDateBean();

    public SelectInputDateBean getDataPrevisaoEntrega() {
        return dataPrevisaoEntrega;
    }

    public void setDataPrevisaoEntrega(SelectInputDateBean sidb) {
        this.dataPrevisaoEntrega = sidb;
    }
    private SelectInputDate campoPrevisaoEntrega = new SelectInputDate();

    public SelectInputDate getCampoPrevisaoEntrega() {
        return campoPrevisaoEntrega;
    }

    public void setCampoPrevisaoEntrega(SelectInputDate sid) {
        this.campoPrevisaoEntrega = sid;
    }
    private HtmlInputText campoPrecoUnitario = new HtmlInputText();

    public HtmlInputText getCampoPrecoUnitario() {
        return campoPrecoUnitario;
    }

    public void setCampoPrecoUnitario(HtmlInputText hit) {
        this.campoPrecoUnitario = hit;
    }
    private HtmlInputText campoPesoCaixa = new HtmlInputText();

    public HtmlInputText getCampoPesoCaixa() {
        return campoPesoCaixa;
    }

    public void setCampoPesoCaixa(HtmlInputText hit) {
        this.campoPesoCaixa = hit;
    }
    private DoubleRangeValidator doubleRangeValidator1 = new DoubleRangeValidator();

    public DoubleRangeValidator getDoubleRangeValidator1() {
        return doubleRangeValidator1;
    }

    public void setDoubleRangeValidator1(DoubleRangeValidator drv) {
        this.doubleRangeValidator1 = drv;
    }
    private HtmlInputText campoTotalCaixa = new HtmlInputText();

    public HtmlInputText getCampoTotalCaixa() {
        return campoTotalCaixa;
    }

    public void setCampoTotalCaixa(HtmlInputText hit) {
        this.campoTotalCaixa = hit;
    }
    private DefaultTableDataModel dataTable1Model = new DefaultTableDataModel();

    public DefaultTableDataModel getDataTable1Model() {
        return dataTable1Model;
    }

    public void setDataTable1Model(DefaultTableDataModel dtdm) {
        this.dataTable1Model = dtdm;
    }
    private HtmlCommandButton botaoCampoAdicionar = new HtmlCommandButton();

    public HtmlCommandButton getBotaoCampoAdicionar() {
        return botaoCampoAdicionar;
    }

    public void setBotaoCampoAdicionar(HtmlCommandButton hcb) {
        this.botaoCampoAdicionar = hcb;
    }
    private javax.faces.component.html.HtmlCommandButton botaoTabelaExcluir = new javax.faces.component.html.HtmlCommandButton();

    public javax.faces.component.html.HtmlCommandButton getBotaoTabelaExcluir() {
        return botaoTabelaExcluir;
    }

    public void setBotaoTabelaExcluir(javax.faces.component.html.HtmlCommandButton hcb) {
        this.botaoTabelaExcluir = hcb;
    }
    private HtmlMessage msgEmpresa = new HtmlMessage();

    public HtmlMessage getMsgEmpresa() {
        return msgEmpresa;
    }

    public void setMsgEmpresa(HtmlMessage hm) {
        this.msgEmpresa = hm;
    }
    private HtmlMessage msgProduto = new HtmlMessage();

    public HtmlMessage getMsgProduto() {
        return msgProduto;
    }

    public void setMsgProduto(HtmlMessage hm) {
        this.msgProduto = hm;
    }
    private HtmlMessage msgQuantidade = new HtmlMessage();

    public HtmlMessage getMsgQuantidade() {
        return msgQuantidade;
    }

    public void setMsgQuantidade(HtmlMessage hm) {
        this.msgQuantidade = hm;
    }
    private HtmlMessage msgPesoCaixa = new HtmlMessage();

    public HtmlMessage getMsgPesoCaixa() {
        return msgPesoCaixa;
    }

    public void setMsgPesoCaixa(HtmlMessage hm) {
        this.msgPesoCaixa = hm;
    }
    private HtmlMessage msgPrecoUnitario = new HtmlMessage();

    public HtmlMessage getMsgPrecoUnitario() {
        return msgPrecoUnitario;
    }

    public void setMsgPrecoUnitario(HtmlMessage hm) {
        this.msgPrecoUnitario = hm;
    }
    private HtmlDataTable tabelaModelo = new HtmlDataTable();

    public HtmlDataTable getTabelaModelo() {
        return tabelaModelo;
    }

    public void setTabelaModelo(HtmlDataTable hdt) {
        this.tabelaModelo = hdt;
    }
    private HtmlCommandButton botaoSair = new HtmlCommandButton();

    public HtmlCommandButton getBotaoSair() {
        return botaoSair;
    }

    public void setBotaoSair(HtmlCommandButton hcb) {
        this.botaoSair = hcb;
    }
    private HtmlCommandButton botaoLimpar = new HtmlCommandButton();

    public HtmlCommandButton getBotaoLimpar() {
        return botaoLimpar;
    }

    public void setBotaoLimpar(HtmlCommandButton hcb) {
        this.botaoLimpar = hcb;
    }
    private HtmlCommandButton botaoCadastrar1 = new HtmlCommandButton();

    public HtmlCommandButton getBotaoCadastrar1() {
        return botaoCadastrar1;
    }

    public void setBotaoCadastrar1(HtmlCommandButton hcb) {
        this.botaoCadastrar1 = hcb;
    }
    private HtmlCommandButton botaoImprimir = new HtmlCommandButton();

    public HtmlCommandButton getBotaoImprimir() {
        return botaoImprimir;
    }

    public void setBotaoImprimir(HtmlCommandButton hcb) {
        this.botaoImprimir = hcb;
    }
    private HtmlCommandButton botaoAlterar = new HtmlCommandButton();

    public HtmlCommandButton getBotaoAlterar() {
        return botaoAlterar;
    }

    public void setBotaoAlterar(HtmlCommandButton hcb) {
        this.botaoAlterar = hcb;
    }
    private HtmlCommandButton botaoConsultar = new HtmlCommandButton();

    public HtmlCommandButton getBotaoConsultar() {
        return botaoConsultar;
    }

    public void setBotaoConsultar(HtmlCommandButton hcb) {
        this.botaoConsultar = hcb;
    }
    private HtmlCommandButton botaoNovo = new HtmlCommandButton();

    public HtmlCommandButton getBotaoNovo() {
        return botaoNovo;
    }

    public void setBotaoNovo(HtmlCommandButton hcb) {
        this.botaoNovo = hcb;
    }
    private PopupBean painelPopupSair = new PopupBean();

    public PopupBean getPainelPopupSair() {
        return painelPopupSair;
    }

    public void setPainelPopupSair(PopupBean pb) {
        this.painelPopupSair = pb;
    }
    private PopupBean painelPopupConsulta = new PopupBean();

    public PopupBean getPainelPopupConsulta() {
        return painelPopupConsulta;
    }

    public void setPainelPopupConsulta(PopupBean pb) {
        this.painelPopupConsulta = pb;
    }
    private PopupBean painelPopupAviso = new PopupBean();

    public PopupBean getPainelPopupAviso() {
        return painelPopupAviso;
    }

    public void setPainelPopupAviso(PopupBean pb) {
        this.painelPopupAviso = pb;
    }
    private PanelPopup painelSair = new PanelPopup();

    public PanelPopup getPainelSair() {
        return painelSair;
    }

    public void setPainelSair(PanelPopup pp) {
        this.painelSair = pp;
    }
    private PanelPopup painelConsulta = new PanelPopup();

    public PanelPopup getPainelConsulta() {
        return painelConsulta;
    }

    public void setPainelConsulta(PanelPopup pp) {
        this.painelConsulta = pp;
    }
    private PanelPopup painelAviso = new PanelPopup();

    public PanelPopup getPainelAviso() {
        return painelAviso;
    }

    public void setPainelAviso(PanelPopup pp) {
        this.painelAviso = pp;
    }
    private HtmlCommandButton botaoSairSim = new HtmlCommandButton();

    public HtmlCommandButton getBotaoSairSim() {
        return botaoSairSim;
    }

    public void setBotaoSairSim(HtmlCommandButton hcb) {
        this.botaoSairSim = hcb;
    }
    private HtmlCommandButton botaoSairNao = new HtmlCommandButton();

    public HtmlCommandButton getBotaoSairNao() {
        return botaoSairNao;
    }

    public void setBotaoSairNao(HtmlCommandButton hcb) {
        this.botaoSairNao = hcb;
    }
    private HtmlCommandButton botaoConsultaOk = new HtmlCommandButton();

    public HtmlCommandButton getBotaoConsultaOk() {
        return botaoConsultaOk;
    }

    public void setBotaoConsultaOk(HtmlCommandButton hcb) {
        this.botaoConsultaOk = hcb;
    }
    private HtmlCommandButton botaoConsultaCancelar = new HtmlCommandButton();

    public HtmlCommandButton getBotaoConsultaCancelar() {
        return botaoConsultaCancelar;
    }

    public void setBotaoConsultaCancelar(HtmlCommandButton hcb) {
        this.botaoConsultaCancelar = hcb;
    }
    private HtmlCommandButton botaoAvisoSim = new HtmlCommandButton();

    public HtmlCommandButton getBotaoAvisoSim() {
        return botaoAvisoSim;
    }

    public void setBotaoAvisoSim(HtmlCommandButton hcb) {
        this.botaoAvisoSim = hcb;
    }
    private HtmlCommandButton botaoNaoAviso = new HtmlCommandButton();

    public HtmlCommandButton getBotaoNaoAviso() {
        return botaoNaoAviso;
    }

    public void setBotaoNaoAviso(HtmlCommandButton hcb) {
        this.botaoNaoAviso = hcb;
    }
    private PopupBean painelPopupMensagem = new PopupBean();

    public PopupBean getPainelPopupMensagem() {
        return painelPopupMensagem;
    }

    public void setPainelPopupMensagem(PopupBean pb) {
        this.painelPopupMensagem = pb;
    }
    private PanelPopup painelMensagem = new PanelPopup();

    public PanelPopup getPainelMensagem() {
        return painelMensagem;
    }

    public void setPainelMensagem(PanelPopup pp) {
        this.painelMensagem = pp;
    }
    private HtmlCommandButton botaoMensagemOk = new HtmlCommandButton();

    public HtmlCommandButton getBotaoMensagemOk() {
        return botaoMensagemOk;
    }

    public void setBotaoMensagemOk(HtmlCommandButton hcb) {
        this.botaoMensagemOk = hcb;
    }
    private HtmlOutputText msgMensagemResultado = new HtmlOutputText();

    public HtmlOutputText getMsgMensagemResultado() {
        return msgMensagemResultado;
    }

    public void setMsgMensagemResultado(HtmlOutputText hot) {
        this.msgMensagemResultado = hot;
    }
    private HtmlOutputText msgAvisoResultado = new HtmlOutputText();

    public HtmlOutputText getMsgAvisoResultado() {
        return msgAvisoResultado;
    }

    public void setMsgAvisoResultado(HtmlOutputText hot) {
        this.msgAvisoResultado = hot;
    }
    private CharacterConverter characterConverter1 = new CharacterConverter();

    public CharacterConverter getCharacterConverter1() {
        return characterConverter1;
    }

    public void setCharacterConverter1(CharacterConverter cc) {
        this.characterConverter1 = cc;
    }
    private DoubleConverter doubleConverter1 = new DoubleConverter();

    public DoubleConverter getDoubleConverter1() {
        return doubleConverter1;
    }

    public void setDoubleConverter1(DoubleConverter dc) {
        this.doubleConverter1 = dc;
    }
    private UIColumn column4 = new UIColumn();

    public UIColumn getColumn4() {
        return column4;
    }

    public void setColumn4(UIColumn uic) {
        this.column4 = uic;
    }
    private UIColumn column3 = new UIColumn();

    public UIColumn getColumn3() {
        return column3;
    }

    public void setColumn3(UIColumn uic) {
        this.column3 = uic;
    }
    private UIColumn column2 = new UIColumn();

    public UIColumn getColumn2() {
        return column2;
    }

    public void setColumn2(UIColumn uic) {
        this.column2 = uic;
    }
    private UIColumn column1 = new UIColumn();

    public UIColumn getColumn1() {
        return column1;
    }

    public void setColumn1(UIColumn uic) {
        this.column1 = uic;
    }
    private UIColumn column6 = new UIColumn();

    public UIColumn getColumn6() {
        return column6;
    }

    public void setColumn6(UIColumn uic) {
        this.column6 = uic;
    }
    private UIColumn column5 = new UIColumn();

    public UIColumn getColumn5() {
        return column5;
    }

    public void setColumn5(UIColumn uic) {
        this.column5 = uic;
    }
    private SqlDateConverter sqlDateConverter1 = new SqlDateConverter();

    public SqlDateConverter getSqlDateConverter1() {
        return sqlDateConverter1;
    }

    public void setSqlDateConverter1(SqlDateConverter sdc) {
        this.sqlDateConverter1 = sdc;
    }
    private DateTimeConverter dateTimeConverter1 = new DateTimeConverter();

    public DateTimeConverter getDateTimeConverter1() {
        return dateTimeConverter1;
    }

    public void setDateTimeConverter1(DateTimeConverter dtc) {
        this.dateTimeConverter1 = dtc;
    }
    private CalendarConverter calendarConverter1 = new CalendarConverter();

    public CalendarConverter getCalendarConverter1() {
        return calendarConverter1;
    }

    public void setCalendarConverter1(CalendarConverter cc) {
        this.calendarConverter1 = cc;
    }
    private DefaultSelectedData dataSelecionadas = new DefaultSelectedData();

    public DefaultSelectedData getDataSelecionadas() {
        return dataSelecionadas;
    }

    public void setDataSelecionadas(DefaultSelectedData dataSelecionadas) {
        this.dataSelecionadas = dataSelecionadas;
    }
    private DefaultSelectionItems datasEntregas = new DefaultSelectionItems();

    public DefaultSelectionItems getDatasEntregas() {
        return datasEntregas;
    }

    public void setDatasEntregas(DefaultSelectionItems datasEntregas) {
        this.datasEntregas = datasEntregas;
    }
    private HtmlSelectOneMenu comboEmpresaConsulta = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getComboEmpresaConsulta() {
        return comboEmpresaConsulta;
    }

    public void setComboEmpresaConsulta(HtmlSelectOneMenu hsom) {
        this.comboEmpresaConsulta = hsom;
    }
    private HtmlSelectOneMenu comboDataEntregaConsulta = new HtmlSelectOneMenu();

    public HtmlSelectOneMenu getComboDataEntregaConsulta() {
        return comboDataEntregaConsulta;
    }

    public void setComboDataEntregaConsulta(HtmlSelectOneMenu hsom) {
        this.comboDataEntregaConsulta = hsom;
    }
    private DateTimeConverter dateTimeConverter2 = new DateTimeConverter();

    public DateTimeConverter getDateTimeConverter2() {
        return dateTimeConverter2;
    }

    public void setDateTimeConverter2(DateTimeConverter dtc) {
        this.dateTimeConverter2 = dtc;
    }
    private CalendarConverter calendarConverter2 = new CalendarConverter();

    public CalendarConverter getCalendarConverter2() {
        return calendarConverter2;
    }

    public void setCalendarConverter2(CalendarConverter cc) {
        this.calendarConverter2 = cc;
    }
   private HtmlInputText campoTotalPedido = new HtmlInputText();

   public HtmlInputText getCampoTotalPedido() {
      return campoTotalPedido;
   }

   public void setCampoTotalPedido(HtmlInputText hit) {
      this.campoTotalPedido = hit;
   }
    private javax.faces.component.html.HtmlOutputText link = new javax.faces.component.html.HtmlOutputText();

    public javax.faces.component.html.HtmlOutputText getLink() {
        return link;
    }

    public void setLink(javax.faces.component.html.HtmlOutputText hot) {
        this.link = hot;
    }

    // </editor-fold>
    /**
     * <p>Construct a new Page bean instance.</p>
     */
    public PedidoEmpresa() {
    }

    /**
     * <p>Callback method that is called whenever a page is navigated to,
     * either directly via a URL, or indirectly via page navigation.
     * Customize this method to acquire resources that will be needed
     * for event handlers and lifecycle methods, whether or not this
     * page is performing post back processing.</p>
     *
     * <p>Note that, if the current request is a postback, the property
     * values of the components do <strong>not</strong> represent any
     * values submitted with this request.  Instead, they represent the
     * property values that were saved for this view when it was rendered.</p>
     */
    @Override
    public void init() {
        // Perform initializations inherited from our superclass
        super.init();



        // Perform application initialization that must complete
        // *before* managed components are initialized
        // TODO - add your own initialiation code here

        // <editor-fold defaultstate="collapsed" desc="Managed Component Initialization">
        // Initialize automatically managed components
        // *Note* - this logic should NOT be modified
        try {
            _init();


        } catch (Exception e) {
            log("PedidoEmpresa Initialization Failure", e);
            throw e instanceof FacesException ? (FacesException) e : new FacesException(e);
        }
        
        //combo de empresas
        voltaCombo();
        dataTable1Model.setWrappedData(null);
        limparCampos();

        //desabilita pop-ups
        painelSair.setRendered(false);
        painelMensagem.setRendered(false);
        painelAviso.setRendered(false);
        painelConsulta.setRendered(false);


    // </editor-fold>
    // Perform application initialization that must complete
    // *after* managed components are initialized
    // TODO - add your own initialization code here
    }

    /**
     * <p>Callback method that is called after the component tree has been
     * restored, but before any event processing takes place.  This method
     * will <strong>only</strong> be called on a postback request that
     * is processing a form submit.  Customize this method to allocate
     * resources that will be required in your event handlers.</p>
     */
    @Override
    public void preprocess() {
    }

    /**
     * <p>Callback method that is called just before rendering takes place.
     * This method will <strong>only</strong> be called for the page that
     * will actually be rendered (and not, for example, on a page that
     * handled a postback and then navigated to a different page).  Customize
     * this method to allocate resources that will be required for rendering
     * this page.</p>
     */
    @Override
    public void prerender() {
    }

    /**
     * <p>Callback method that is called after rendering is completed for
     * this request, if <code>init()</code> was called (regardless of whether
     * or not this was the page that was actually rendered).  Customize this
     * method to release resources acquired in the <code>init()</code>,
     * <code>preprocess()</code>, or <code>prerender()</code> methods (or
     * acquired during execution of an event handler).</p>
     */
    @Override
    public void destroy() {
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *

     * @retorna uma referência para o bean de dados limitados
     */
    protected ApplicationBean1 getApplicationBean1() {
        return (ApplicationBean1) getBean("ApplicationBean1");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected SessionBean1 getSessionBean1() {
        return (SessionBean1) getBean("SessionBean1");
    }

    /**
     * <p>Retornar uma referência para o Bean de dados limitados.</p>
     *
     * @retorna uma referência para o bean de dados limitados
     */
    protected RequestBean1 getRequestBean1() {
        return (RequestBean1) getBean("RequestBean1");
    }

    public void voltaCombo(){
        empresas.clear();
        setEmpresas(new IceDecorator(EmpresaBO.class).montaCombo());
        empresas.add(0,new SelectItem(0, "Selecione"));
        comboEmpresa.setValue(0);
        System.out.println("aaaaaaaaaki"+comboEmpresa.getValue());
        produtos.clear();
        setProdutos(new IceDecorator(ProdutoBO.class).montaCombo());
        produtos.add(0, new SelectItem(0, "Selecione"));
        comboProduto.setValue(0);
    }
    //métodos para uso dos botões e campos
    public void desabilitarCampos() {
        comboEmpresa.setDisabled(true);
        campoPrevisaoEntrega.setDisabled(true);
        comboProduto.setDisabled(true);
        campoQuantidade.setDisabled(true);
        campoPesoCaixa.setDisabled(true);
        campoTotalCaixa.setDisabled(true);
        campoPrecoUnitario.setDisabled(true);
        
    }

    public void habilitarCampos() {
        comboEmpresa.setDisabled(false);
        campoPrevisaoEntrega.setDisabled(false);
        comboProduto.setDisabled(false);
        campoQuantidade.setDisabled(false);
        campoPesoCaixa.setDisabled(false);
        campoTotalCaixa.setDisabled(false);
        campoPrecoUnitario.setDisabled(false);
    }

    //método para uso da consulta de pedido
    public void consultaItensEmpresa() throws Exception {
        try {
            PedidoEmpresaVO pedido = (PedidoEmpresaVO) new IceDecorator(PedidoEmpresaBO.class).retornaObjetoCodigo("codPedidoEmpresa",
                    Integer.parseInt(comboDataEntregaConsulta.getValue().toString()));
            limparCampos();
            habilitarCampos();
            campoTotalPedido.setValue(pedido.getValorTotal());
            campoPrevisaoEntrega.setValue(pedido.getDataEntrega());            
            setBean("PedidoEmpresa", pedido);
            dataTable1Model.setWrappedData(pedido.getItemPedidoEmpresa());
            
            //desabilita campos para não deixar o usuário modificar
            desabilitarCampos();
        } catch (Exception e) {
            msgMensagemResultado.setValue("Erro ao cadastrar pedido");
            painelMensagem.setRendered(true);
        }
    }

    //limpa os campos sem salvar nada
    public void limparCampos() {

        FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("PedidoEmpresa");
        FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("Previsao");
        habilitarCampos();
        
        campoPrevisaoEntrega.resetValue();
        //campoPesoCaixa.resetValue();
        campoPesoCaixa.setValue("0");
        //campoPrecoUnitario.resetValue();
        campoPrecoUnitario.setValue("0");
        //campoQuantidade.resetValue();
        campoQuantidade.setValue("0");

        campoTotalCaixa.setReadonly(false);
        //campoTotalCaixa.resetValue();
        campoTotalCaixa.setValue("0");
        campoTotalCaixa.setReadonly(true);

        campoTotalPedido.setReadonly(false);
        //campoTotalPedido.resetValue();
        campoTotalPedido.setValue("0");
        campoTotalPedido.setReadonly(true);

        voltaCombo();
        datasEntregas.clear();
        consultaOuSalva();
        PedidoEmpresaVO pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");
        dataTable1Model.setWrappedData(pedido.getItemPedidoEmpresa());
        habilitarCampos();
    }

    //adiciona item na tabela
    public void addItem(ItemPedidoEmpresa item) {

        PedidoEmpresaVO pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");
        pedido.adicionaItemPedido(item);
        setBean("PedidoEmpresa", pedido);
        dataTable1Model.setWrappedData(pedido.getItemPedidoEmpresa());
        campoTotalPedido.setValue(pedido.getValorTotal());
    }

    //calcula as caixas conforme a quantidade do pedido e a quantidade que vai em cada caixa
    public void calcularCaixas() {
        campoTotalCaixa.setValue("");
        double qntd = 0.00, pesoDouble = 0.00, conta = 0.00;
        try {            
            qntd = Double.parseDouble(campoQuantidade.getValue().toString());
            pesoDouble = Double.parseDouble(campoPesoCaixa.getValue().toString());
        } catch (Exception e) {
        }
        if ((qntd != 0) && (pesoDouble != 0)) {
            conta = Math.ceil(qntd / pesoDouble);
            campoTotalCaixa.setValue(conta);
        } else {
            campoTotalCaixa.setValue("");
        }
    }


    public void novaTabela() {
        limparCampos();
    }

    //deleta a lista que foi retirada do pedido
    public void deletarLista() {
        while (!listaExclusÃ£o.isEmpty()) {
            try {
                new IceDecorator(ItemPedidoEmpresaBO.class).excluir(listaExclusÃ£o.iterator().next());
                listaExclusÃ£o.remove(listaExclusÃ£o.iterator().next());
            } catch (Exception e) {

               //se der erro, significa que o item não estava no bd então retira-se da lista
               listaExclusÃ£o.remove(listaExclusÃ£o.iterator().next());
            }
        }
    }

    //consulta ou salva o pedido empresa de acordo com os dados selecionados.
    public void consultaOuSalva() {
        try {
            PedidoEmpresaVO pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");
            try {
                pedido.setDataEntrega((Date) campoPrevisaoEntrega.getValue());
                //procura por pedidos ja existentes
                pedido = (PedidoEmpresaVO) new IceDecorator(PedidoEmpresaBO.class).buscaPorDoisParametros("empresa.codEmpresa", "dataEntrega", pedido.getEmpresa().getCodEmpresa(),
                        pedido.getDataEntrega());
                dataTable1Model.setWrappedData(pedido.getItemPedidoEmpresa());
                setBean("PedidoEmpresa", pedido);

            } catch (Exception e) {
                //se ocorrer algum erro, é criado um novo pedido empresa para que não fique como nulo
                FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("PedidoEmpresa");

            }
        } catch (Exception e) {
            //se der erro ao salvar, entrará aki
        }
    }

    //ação dos campos e combos do painel geral
    public void campoQuantidade_processValueChange(ValueChangeEvent vce) {        
        this.calcularCaixas();
    }

    public void campoPesoCaixa_processValueChange(ValueChangeEvent vce) {
        this.calcularCaixas();
    }

    public void comboEmpresaConsulta_processValueChange(ValueChangeEvent vce) {
        try {
            datasEntregas.clear();
            setDatasEntregas(new IceDecorator(PedidoEmpresaBO.class).montaComboData("empresa", "codEmpresa",
                    Integer.parseInt(comboEmpresaConsulta.getValue().toString())));
            datasEntregas.add(0, new SelectItem(0, "Selecione"));
            comboDataEntregaConsulta.setValue(0);
        } catch (Exception e) {
            datasEntregas.clear();
        }
    }

    //método do botão que adiciona item à tabela
    public String botaoCampoAdicionar_action() {        
        
        try {
            PedidoEmpresaVO pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");
            pedido.setDataEntrega((Date) campoPrevisaoEntrega.getValue());
            if (!campoPrevisaoEntrega.isDisabled()) {
                pedido.getEmpresa().setCodEmpresa(Integer.parseInt(comboEmpresa.getValue().toString()));
                consultaOuSalva();
                campoPrevisaoEntrega.setDisabled(true);
                comboEmpresa.setDisabled(true);
            }
            pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");
            pedido.setDataEntrega((Date) campoPrevisaoEntrega.getValue());
            pedido.getEmpresa().setCodEmpresa(Integer.parseInt(comboEmpresa.getValue().toString()));

            ItemPedidoEmpresa itemPrev = new ItemPedidoEmpresa();
            itemPrev = (ItemPedidoEmpresa) getBean("ItemPedidoEmpresa");

            Produto produto = (Produto) new IceDecorator(ProdutoBO.class).retornaObjetoCodigo("codProduto",
                    Integer.parseInt(comboProduto.getValue().toString()));

            itemPrev.setProduto(produto);
            itemPrev.setPedidoEmpresa(pedido);
            itemPrev.setQuantidadeAuxiliar(itemPrev.getQuantidade());
            addItem(itemPrev);

            //remove-se para que ao adicionar outro item ele seja considerado como um "novo" item
            FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove("ItemPedidoEmpresa");
        } catch (Exception e) {
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
        campoTotalCaixa.setValue("");
        return null;
    }

    //botão da tabela
    public String botaoTabelaExcluir_action() {
            PedidoEmpresaVO pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");
            List<ItemPedidoEmpresa> itemsEmp = (List<ItemPedidoEmpresa>) pedido.getItemPedidoEmpresa();
        if(itemsEmp.get(dataTable1Model.getRowIndex()).getQuantidadeAuxiliar()==itemsEmp.get(dataTable1Model.getRowIndex()).getQuantidade()){
            
            listaExclusÃ£o.add(itemsEmp.remove(dataTable1Model.getRowIndex()));
            pedido.setItemPedidoEmpresa(itemsEmp);
            setBean("PedidoEmpresa", pedido);
            dataTable1Model.setWrappedData(pedido.getItemPedidoEmpresa());
            campoTotalPedido.setValue(pedido.getValorTotal());
        }else{
            painelMensagem.setRendered(true);
            msgMensagemResultado.setValue("Este produto do Pedido ja está relacionado a uma previsao, impossivel excluir.");
        }
        return null;
    }

    //ação dos botões do painel de opções
    public String botaoNovo_action() {
        novaTabela();
        habilitarCampos();
        return null;
    }

    public String botaoCancelar_action() {
        //return null means stay on the same page
        return "menu";
    }

    public String botaoCadastrar1_action() {

        PedidoEmpresaVO pedido = (PedidoEmpresaVO) getBean("PedidoEmpresa");
        try {
            deletarLista();//deleta o que foi retirado da tabela
            pedido.setDataEntrega((Date)campoPrevisaoEntrega.getValue());
            new IceDecorator(PedidoEmpresaBO.class).salvar(pedido);//salva os itens do pedido

            this.limparCampos();
            //habilita combo de empresa
            comboEmpresa.setDisabled(false);
            msgMensagemResultado.setValue("Operação Efetuada Com Sucesso");
            painelMensagem.setRendered(true);

        } catch (Exception e) {
            msgMensagemResultado.setValue("Erro ao cadastrar pedido");
            painelMensagem.setRendered(true);
        }
        return null;
    }

    public String botaoSair_action() {
        painelSair.setRendered(true);
        return null;
    }

//botões dos pop ups
    public String botaoSairSim_action() {
        //return null means stay on the same page
        return "menu";
    }

    public String botaoSairNao_action() {
        painelSair.setRendered(false);
        return null;
    }

    public String botaoConsultar_action() {
        painelConsulta.setRendered(true);
        try{
            empresasConsulta.clear();
            setEmpresasConsulta(new IceDecorator(EmpresaBO.class).montaCombo());
            empresasConsulta.add(0,new SelectItem(0, "Selecione"));
            comboEmpresaConsulta.setValue(0);
            datasEntregas.clear();
            datasEntregas.add(0, new SelectItem(0, "Selecione"));
            comboDataEntregaConsulta.setValue(0);
        }catch(Exception e){

        }

        
        return null;
    }

    public String botaoConsultaOk_action() {        
        painelConsulta.setRendered(false);
        
        try {
            consultaItensEmpresa();
            desabilitarCampos();
        } catch (Exception ex) {
            painelAviso.setRendered(true);
        }

        comboEmpresa.setValue(comboEmpresaConsulta.getValue());
        return null;
    }

    public String botaoConsultaCancelar_action() {
        painelConsulta.setRendered(false);
        return null;
    }

    public String botaoAvisoSim_action() {
        painelAviso.setRendered(false);
        return null;
    }

    public String botaoNaoAviso_action() {
        painelAviso.setRendered(false);
        painelConsulta.setRendered(false);
        return null;
    }

    public String botaoMensagemOk_action() {
        painelMensagem.setRendered(false);
        return null;
    }

    public String botaoLimpar_action() {
        novaTabela();
        comboEmpresa.setDisabled(false);
        return null;
    }

    public String tabelaModelo_firstPageAction() {
        {
            return null;
        }

    }

    public String tabelaModelo_previousPageAction() {
        {
            return null;
        }

    }

    public String tabelaModelo_nextPageAction() {

        return null;
    }

    public String tabelaModelo_lastPageAction() {
        return null;
    }  

    public String botaoAlterar_action() {
        habilitarCampos();
        return null;
    }

    public void campoQuantidade_validate(FacesContext context, UIComponent component, Object value) {
        new ValidaFacade().validateNumeros(context, component, value, PedidoEmpresaBO.class, parar);
    }

    public void campoPesoCaixa_validate(FacesContext fc, UIComponent uic, Object o) {
        new ValidaFacade().validateNumeros(fc, uic, o, PedidoEmpresaBO.class, parar);
    }

    public void campoPrecoUnitario_validate(FacesContext fc2, UIComponent uic2, Object o2) {
        new ValidaFacade().validateNumeros(fc2, uic2, o2, PedidoEmpresaBO.class, parar);
    }

    public void comboEmpresa_validate(FacesContext context, UIComponent component, Object value) {
//        new ValidaFacade().validaEmpresa(context, component, value);
    }

}
